home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1995 February: Tool Chest / Dev.CD Feb 95 / Dev.CD Feb 95.toast / Tool Chest / Interfaces / Universal Interfaces 2.0a3 / Universal AIncludes / MIDI.a < prev    next >
Encoding:
Text File  |  1994-11-11  |  10.8 KB  |  640 lines  |  [TEXT/MPS ]

  1. ;
  2. ;    File:        MIDI.a
  3. ;
  4. ;    Copyright:    © 1984-1994 by Apple Computer, Inc.
  5. ;                All rights reserved.
  6. ;
  7. ;    Version:    Universal Interfaces 2.0a3  ETO #16, MPW prerelease.  Friday, November 11, 1994. 
  8. ;
  9. ;    Bugs?:        If you find a problem with this file, send the file and version
  10. ;                information (from above) and the problem description to:
  11. ;
  12. ;                    Internet:    apple.bugs@applelink.apple.com
  13. ;                    AppleLink:    APPLE.BUGS
  14. ;
  15. ;
  16.  
  17.     IF &TYPE('__MIDI__') = 'UNDEFINED' THEN
  18. __MIDI__ SET 1
  19.  
  20.  
  21.     IF &TYPE('__ERRORS__') = 'UNDEFINED' THEN
  22.     include 'Errors.a'
  23.     ENDIF
  24. ;        include 'ConditionalMacros.a'                                ;
  25.  
  26.     IF &TYPE('__TYPES__') = 'UNDEFINED' THEN
  27.     include 'Types.a'
  28.     ENDIF
  29.  
  30.     IF &TYPE('__MIXEDMODE__') = 'UNDEFINED' THEN
  31.     include 'MixedMode.a'
  32.     ENDIF
  33.  
  34. midiToolNum                        EQU        4                    ;tool number of MIDI Manager for SndDispVersion call
  35. midiMaxNameLen                    EQU        31                    ;maximum number of characters in port and client names
  36. ; Time formats 
  37. midiFormatMSec                    EQU        0                    ;milliseconds
  38. midiFormatBeats                    EQU        1                    ;beats
  39. midiFormat24fpsBit                EQU        2                    ;24 frames/sec.
  40. midiFormat25fpsBit                EQU        3                    ;25 frames/sec.
  41. midiFormat30fpsDBit                EQU        4                    ;30 frames/sec. drop-frame
  42. midiFormat30fpsBit                EQU        5                    ;30 frames/sec.
  43. midiFormat24fpsQF                EQU        6                    ;24 frames/sec. longInt format 
  44. midiFormat25fpsQF                EQU        7                    ;25 frames/sec. longInt format 
  45. midiFormat30fpsDQF                EQU        8                    ;30 frames/sec. drop-frame longInt format 
  46. midiFormat30fpsQF                EQU        9                    ;30 frames/sec. longInt format 
  47. midiInternalSync                EQU        0                    ;internal sync
  48. midiExternalSync                EQU        1                    ;external sync
  49. ; Port types
  50. midiPortTypeTime                EQU        0                    ;time port
  51. midiPortTypeInput                EQU        1                    ;input port
  52. midiPortTypeOutput                EQU        2                    ;output port
  53. midiPortTypeTimeInv                EQU        3                    ;invisible time port
  54. ; OffsetTimes  
  55. midiGetEverything                EQU        $7FFFFFFF            ;get all packets, regardless of time stamps
  56. midiGetNothing                    EQU        $80000000            ;get no packets, regardless of time stamps
  57. midiGetCurrent                    EQU        $00000000            ;get current packets only
  58.  
  59. ;    MIDI data and messages are passed in MIDIPacket records (see below).
  60. ;    The first byte of every MIDIPacket contains a set of flags
  61. ;
  62. ;    bits 0-1    00 = new MIDIPacket, not continued
  63. ;                     01 = begining of continued MIDIPacket
  64. ;                     10 = end of continued MIDIPacket
  65. ;                     11 = continuation
  66. ;    bits 2-3     reserved
  67. ;
  68. ;    bits 4-6      000 = packet contains MIDI data
  69. ;
  70. ;                  001 = packet contains MIDI Manager message
  71. ;
  72. ;    bit 7         0 = MIDIPacket has valid stamp
  73. ;                  1 = stamp with current clock
  74. ;
  75. midiContMask                    EQU        $03
  76. midiNoCont                        EQU        $00
  77. midiStartCont                    EQU        $01
  78. midiMidCont                        EQU        $03
  79. midiEndCont                        EQU        $02
  80. midiTypeMask                    EQU        $70
  81. midiMsgType                        EQU        $00
  82. midiMgrType                        EQU        $10
  83. midiTimeStampMask                EQU        $80
  84. midiTimeStampCurrent            EQU        $80
  85. midiTimeStampValid                EQU        $00
  86. ; MIDIPacket command words (the first word in the data field for midiMgrType messages) 
  87. midiOverflowErr                    EQU        $0001
  88. midiSCCErr                        EQU        $0002
  89. midiPacketErr                    EQU        $0003
  90. ;all command words less than this value are error indicators
  91. midiMaxErr                        EQU        $00FF
  92. ; Valid results to be returned by readHooks 
  93. midiKeepPacket                    EQU        0
  94. midiMorePacket                    EQU        1
  95. midiNoMorePacket                EQU        2
  96. ; Driver calls 
  97. midiOpenDriver                    EQU        1
  98. midiCloseDriver                    EQU        2
  99.  
  100. MIDIPacket                 RECORD    0
  101. flags                     ds.b    1
  102. len                         ds.b    1
  103. tStamp                     ds.l    1
  104. data                     ds.b    249
  105. sizeof                     EQU    256
  106.                         ENDR
  107.  
  108. MIDIClkInfo             RECORD    0
  109. syncType                 ds.w    1                                    ;synchronization external/internal
  110. curTime                     ds.l    1                                    ;current value of port's clock
  111. format                     ds.w    1                                    ;time code format
  112. sizeof                     EQU    8
  113.                         ENDR
  114.  
  115. MIDIIDRec                 RECORD    0
  116. clientID                 ds.l    1
  117. portID                     ds.l    1
  118. sizeof                     EQU    8
  119.                         ENDR
  120.  
  121. MIDIPortInfo             RECORD    0
  122. portType                 ds.w    1                                    ;type of port
  123. timeBase                 ds        MIDIIDRec                            ;MIDIIDRec for time base
  124. numConnects                 ds.w    1                                    ;number of connections
  125. cList                     ds        MIDIIDRec                            ;ARRAY [1..numConnects] of MIDIIDRec
  126. sizeof                     EQU    20
  127.                         ENDR
  128.  
  129. MIDIPortParams             RECORD    0
  130. portID                     ds.l    1                                    ;ID of port, unique within client
  131. portType                 ds.w    1                                    ;Type of port - input, output, time, etc.
  132. timeBase                 ds.w    1                                    ;refnum of time base, 0 if none
  133. offsetTime                 ds.l    1                                    ;offset for current time stamps
  134. readHook                 ds.l    1                                    ;routine to call when input data is valid
  135. refCon                     ds.l    1                                    ;refcon for port (for client use)
  136. initClock                 ds        MIDIClkInfo                        ;initial settings for a time base
  137. name                     ds.l    64                                ;name of the port, This is a real live string, not a ptr.
  138. sizeof                     EQU    284
  139.                         ENDR
  140.  
  141. MIDIIDList                 RECORD    0
  142. numIDs                     ds.w    1
  143. list                     ds.l    1
  144. sizeof                     EQU    6
  145.                         ENDR
  146.  
  147.     IF GENERATING68K THEN
  148.         Macro
  149.         _MIDIVersion
  150.             dc.w     $203C
  151.             dc.w     $0000
  152.             dc.w     $0000
  153.             dc.w     $A800
  154.         EndM
  155.     ELSE
  156.         IMPORT    MIDIVersion
  157.     ENDIF
  158.  
  159.     IF GENERATING68K THEN
  160.         Macro
  161.         _MIDISignIn
  162.             dc.w     $203C
  163.             dc.w     $0004
  164.             dc.w     $0000
  165.             dc.w     $A800
  166.         EndM
  167.     ELSE
  168.         IMPORT    MIDISignIn
  169.     ENDIF
  170.  
  171.     IF GENERATING68K THEN
  172.         Macro
  173.         _MIDISignOut
  174.             dc.w     $203C
  175.             dc.w     $0008
  176.             dc.w     $0000
  177.             dc.w     $A800
  178.         EndM
  179.     ELSE
  180.         IMPORT    MIDISignOut
  181.     ENDIF
  182.  
  183.     IF GENERATING68K THEN
  184.         Macro
  185.         _MIDIGetClients
  186.             dc.w     $203C
  187.             dc.w     $000C
  188.             dc.w     $0000
  189.             dc.w     $A800
  190.         EndM
  191.     ELSE
  192.         IMPORT    MIDIGetClients
  193.     ENDIF
  194.  
  195.     IF GENERATING68K THEN
  196.         Macro
  197.         _MIDIGetClientName
  198.             dc.w     $203C
  199.             dc.w     $0010
  200.             dc.w     $0000
  201.             dc.w     $A800
  202.         EndM
  203.     ELSE
  204.         IMPORT    MIDIGetClientName
  205.     ENDIF
  206.  
  207.     IF GENERATING68K THEN
  208.         Macro
  209.         _MIDISetClientName
  210.             dc.w     $203C
  211.             dc.w     $0014
  212.             dc.w     $0000
  213.             dc.w     $A800
  214.         EndM
  215.     ELSE
  216.         IMPORT    MIDISetClientName
  217.     ENDIF
  218.  
  219.     IF GENERATING68K THEN
  220.         Macro
  221.         _MIDIGetPorts
  222.             dc.w     $203C
  223.             dc.w     $0018
  224.             dc.w     $0000
  225.             dc.w     $A800
  226.         EndM
  227.     ELSE
  228.         IMPORT    MIDIGetPorts
  229.     ENDIF
  230.  
  231.     IF GENERATING68K THEN
  232.         Macro
  233.         _MIDIAddPort
  234.             dc.w     $203C
  235.             dc.w     $001C
  236.             dc.w     $0000
  237.             dc.w     $A800
  238.         EndM
  239.     ELSE
  240.         IMPORT    MIDIAddPort
  241.     ENDIF
  242.  
  243.     IF GENERATING68K THEN
  244.         Macro
  245.         _MIDIGetPortInfo
  246.             dc.w     $203C
  247.             dc.w     $0020
  248.             dc.w     $0000
  249.             dc.w     $A800
  250.         EndM
  251.     ELSE
  252.         IMPORT    MIDIGetPortInfo
  253.     ENDIF
  254.  
  255.     IF GENERATING68K THEN
  256.         Macro
  257.         _MIDIConnectData
  258.             dc.w     $203C
  259.             dc.w     $0024
  260.             dc.w     $0000
  261.             dc.w     $A800
  262.         EndM
  263.     ELSE
  264.         IMPORT    MIDIConnectData
  265.     ENDIF
  266.  
  267.     IF GENERATING68K THEN
  268.         Macro
  269.         _MIDIUnConnectData
  270.             dc.w     $203C
  271.             dc.w     $0028
  272.             dc.w     $0000
  273.             dc.w     $A800
  274.         EndM
  275.     ELSE
  276.         IMPORT    MIDIUnConnectData
  277.     ENDIF
  278.  
  279.     IF GENERATING68K THEN
  280.         Macro
  281.         _MIDIConnectTime
  282.             dc.w     $203C
  283.             dc.w     $002C
  284.             dc.w     $0000
  285.             dc.w     $A800
  286.         EndM
  287.     ELSE
  288.         IMPORT    MIDIConnectTime
  289.     ENDIF
  290.  
  291.     IF GENERATING68K THEN
  292.         Macro
  293.         _MIDIUnConnectTime
  294.             dc.w     $203C
  295.             dc.w     $0030
  296.             dc.w     $0000
  297.             dc.w     $A800
  298.         EndM
  299.     ELSE
  300.         IMPORT    MIDIUnConnectTime
  301.     ENDIF
  302.  
  303.     IF GENERATING68K THEN
  304.         Macro
  305.         _MIDIFlush
  306.             dc.w     $203C
  307.             dc.w     $0034
  308.             dc.w     $0000
  309.             dc.w     $A800
  310.         EndM
  311.     ELSE
  312.         IMPORT    MIDIFlush
  313.     ENDIF
  314.  
  315.     IF GENERATING68K THEN
  316.         Macro
  317.         _MIDIGetReadHook
  318.             dc.w     $203C
  319.             dc.w     $0038
  320.             dc.w     $0000
  321.             dc.w     $A800
  322.         EndM
  323.     ELSE
  324.         IMPORT    MIDIGetReadHook
  325.     ENDIF
  326.  
  327.     IF GENERATING68K THEN
  328.         Macro
  329.         _MIDISetReadHook
  330.             dc.w     $203C
  331.             dc.w     $003C
  332.             dc.w     $0000
  333.             dc.w     $A800
  334.         EndM
  335.     ELSE
  336.         IMPORT    MIDISetReadHook
  337.     ENDIF
  338.  
  339.     IF GENERATING68K THEN
  340.         Macro
  341.         _MIDIGetPortName
  342.             dc.w     $203C
  343.             dc.w     $0040
  344.             dc.w     $0000
  345.             dc.w     $A800
  346.         EndM
  347.     ELSE
  348.         IMPORT    MIDIGetPortName
  349.     ENDIF
  350.  
  351.     IF GENERATING68K THEN
  352.         Macro
  353.         _MIDISetPortName
  354.             dc.w     $203C
  355.             dc.w     $0044
  356.             dc.w     $0000
  357.             dc.w     $A800
  358.         EndM
  359.     ELSE
  360.         IMPORT    MIDISetPortName
  361.     ENDIF
  362.  
  363.     IF GENERATING68K THEN
  364.         Macro
  365.         _MIDIWakeUp
  366.             dc.w     $203C
  367.             dc.w     $0048
  368.             dc.w     $0000
  369.             dc.w     $A800
  370.         EndM
  371.     ELSE
  372.         IMPORT    MIDIWakeUp
  373.     ENDIF
  374.  
  375.     IF GENERATING68K THEN
  376.         Macro
  377.         _MIDIRemovePort
  378.             dc.w     $203C
  379.             dc.w     $004C
  380.             dc.w     $0000
  381.             dc.w     $A800
  382.         EndM
  383.     ELSE
  384.         IMPORT    MIDIRemovePort
  385.     ENDIF
  386.  
  387.     IF GENERATING68K THEN
  388.         Macro
  389.         _MIDIGetSync
  390.             dc.w     $203C
  391.             dc.w     $0050
  392.             dc.w     $0000
  393.             dc.w     $A800
  394.         EndM
  395.     ELSE
  396.         IMPORT    MIDIGetSync
  397.     ENDIF
  398.  
  399.     IF GENERATING68K THEN
  400.         Macro
  401.         _MIDISetSync
  402.             dc.w     $203C
  403.             dc.w     $0054
  404.             dc.w     $0000
  405.             dc.w     $A800
  406.         EndM
  407.     ELSE
  408.         IMPORT    MIDISetSync
  409.     ENDIF
  410.  
  411.     IF GENERATING68K THEN
  412.         Macro
  413.         _MIDIGetCurTime
  414.             dc.w     $203C
  415.             dc.w     $0058
  416.             dc.w     $0000
  417.             dc.w     $A800
  418.         EndM
  419.     ELSE
  420.         IMPORT    MIDIGetCurTime
  421.     ENDIF
  422.  
  423.     IF GENERATING68K THEN
  424.         Macro
  425.         _MIDISetCurTime
  426.             dc.w     $203C
  427.             dc.w     $005C
  428.             dc.w     $0000
  429.             dc.w     $A800
  430.         EndM
  431.     ELSE
  432.         IMPORT    MIDISetCurTime
  433.     ENDIF
  434.  
  435.     IF GENERATING68K THEN
  436.         Macro
  437.         _MIDIStartTime
  438.             dc.w     $203C
  439.             dc.w     $0060
  440.             dc.w     $0000
  441.             dc.w     $A800
  442.         EndM
  443.     ELSE
  444.         IMPORT    MIDIStartTime
  445.     ENDIF
  446.  
  447.     IF GENERATING68K THEN
  448.         Macro
  449.         _MIDIStopTime
  450.             dc.w     $203C
  451.             dc.w     $0064
  452.             dc.w     $0000
  453.             dc.w     $A800
  454.         EndM
  455.     ELSE
  456.         IMPORT    MIDIStopTime
  457.     ENDIF
  458.  
  459.     IF GENERATING68K THEN
  460.         Macro
  461.         _MIDIPoll
  462.             dc.w     $203C
  463.             dc.w     $0068
  464.             dc.w     $0000
  465.             dc.w     $A800
  466.         EndM
  467.     ELSE
  468.         IMPORT    MIDIPoll
  469.     ENDIF
  470.  
  471.     IF GENERATING68K THEN
  472.         Macro
  473.         _MIDIWritePacket
  474.             dc.w     $203C
  475.             dc.w     $006C
  476.             dc.w     $0000
  477.             dc.w     $A800
  478.         EndM
  479.     ELSE
  480.         IMPORT    MIDIWritePacket
  481.     ENDIF
  482.  
  483.     IF GENERATING68K THEN
  484.         Macro
  485.         _MIDIWorldChanged
  486.             dc.w     $203C
  487.             dc.w     $0070
  488.             dc.w     $0000
  489.             dc.w     $A800
  490.         EndM
  491.     ELSE
  492.         IMPORT    MIDIWorldChanged
  493.     ENDIF
  494.  
  495.     IF GENERATING68K THEN
  496.         Macro
  497.         _MIDIGetOffsetTime
  498.             dc.w     $203C
  499.             dc.w     $0074
  500.             dc.w     $0000
  501.             dc.w     $A800
  502.         EndM
  503.     ELSE
  504.         IMPORT    MIDIGetOffsetTime
  505.     ENDIF
  506.  
  507.     IF GENERATING68K THEN
  508.         Macro
  509.         _MIDISetOffsetTime
  510.             dc.w     $203C
  511.             dc.w     $0078
  512.             dc.w     $0000
  513.             dc.w     $A800
  514.         EndM
  515.     ELSE
  516.         IMPORT    MIDISetOffsetTime
  517.     ENDIF
  518.  
  519.     IF GENERATING68K THEN
  520.         Macro
  521.         _MIDIConvertTime
  522.             dc.w     $203C
  523.             dc.w     $007C
  524.             dc.w     $0000
  525.             dc.w     $A800
  526.         EndM
  527.     ELSE
  528.         IMPORT    MIDIConvertTime
  529.     ENDIF
  530.  
  531.     IF GENERATING68K THEN
  532.         Macro
  533.         _MIDIGetRefCon
  534.             dc.w     $203C
  535.             dc.w     $0080
  536.             dc.w     $0000
  537.             dc.w     $A800
  538.         EndM
  539.     ELSE
  540.         IMPORT    MIDIGetRefCon
  541.     ENDIF
  542.  
  543.     IF GENERATING68K THEN
  544.         Macro
  545.         _MIDISetRefCon
  546.             dc.w     $203C
  547.             dc.w     $0084
  548.             dc.w     $0000
  549.             dc.w     $A800
  550.         EndM
  551.     ELSE
  552.         IMPORT    MIDISetRefCon
  553.     ENDIF
  554.  
  555.     IF GENERATING68K THEN
  556.         Macro
  557.         _MIDIGetClRefCon
  558.             dc.w     $203C
  559.             dc.w     $0088
  560.             dc.w     $0000
  561.             dc.w     $A800
  562.         EndM
  563.     ELSE
  564.         IMPORT    MIDIGetClRefCon
  565.     ENDIF
  566.  
  567.     IF GENERATING68K THEN
  568.         Macro
  569.         _MIDISetClRefCon
  570.             dc.w     $203C
  571.             dc.w     $008C
  572.             dc.w     $0000
  573.             dc.w     $A800
  574.         EndM
  575.     ELSE
  576.         IMPORT    MIDISetClRefCon
  577.     ENDIF
  578.  
  579.     IF GENERATING68K THEN
  580.         Macro
  581.         _MIDIGetTCFormat
  582.             dc.w     $203C
  583.             dc.w     $0090
  584.             dc.w     $0000
  585.             dc.w     $A800
  586.         EndM
  587.     ELSE
  588.         IMPORT    MIDIGetTCFormat
  589.     ENDIF
  590.  
  591.     IF GENERATING68K THEN
  592.         Macro
  593.         _MIDISetTCFormat
  594.             dc.w     $203C
  595.             dc.w     $0094
  596.             dc.w     $0000
  597.             dc.w     $A800
  598.         EndM
  599.     ELSE
  600.         IMPORT    MIDISetTCFormat
  601.     ENDIF
  602.  
  603.     IF GENERATING68K THEN
  604.         Macro
  605.         _MIDISetRunRate
  606.             dc.w     $203C
  607.             dc.w     $0098
  608.             dc.w     $0000
  609.             dc.w     $A800
  610.         EndM
  611.     ELSE
  612.         IMPORT    MIDISetRunRate
  613.     ENDIF
  614.  
  615.     IF GENERATING68K THEN
  616.         Macro
  617.         _MIDIGetClientIcon
  618.             dc.w     $203C
  619.             dc.w     $009C
  620.             dc.w     $0000
  621.             dc.w     $A800
  622.         EndM
  623.     ELSE
  624.         IMPORT    MIDIGetClientIcon
  625.     ENDIF
  626.  
  627.     IF GENERATING68K THEN
  628.         Macro
  629.         _SndDispVersion
  630.             dc.w     $203C
  631.             dc.w     $0000
  632.             dc.w     $0000
  633.             dc.w     $A800
  634.         EndM
  635.     ELSE
  636.         IMPORT    SndDispVersion
  637.     ENDIF
  638.  
  639.     ENDIF ; __MIDI__
  640.